﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

/** 
 * de string wordt als volgt opgebouwd
 * | splitsing tussen onderdelen
 */ 
namespace QuizGUI
{
    class Messenger
    {
        private List<Deelnemer> deelnemer;
        private string vraagId;
        private string vraagNr;
        private string rondeNr;
        private string antwoord;
        
        private byte[] messageInBytes;

        public Messenger() { }

        public Messenger(List<Deelnemer> pDeelnemer, string pVraagId, string pVraagNr, string pRondeNr, string pAntwoord)
        {
            this.deelnemer = pDeelnemer;
            this.vraagId = pVraagId;
            this.vraagNr = pVraagNr;
            this.rondeNr = pRondeNr;
            this.antwoord = pAntwoord;
        }

        //ontleed een boodschap en zet deze in de veriabelen
        private void dissectMessage(byte[] msg)
        {
            string message = ConvertBytesToString(msg);
            string[] splitMessage = message.Split('|');
        
            foreach (string s in splitMessage)
            {
                if (s.Contains("{naam}"))
                {
                    string[] tempDn = s.Split('>');
                    int tempScore;

                    int.TryParse(tempDn[1], out tempScore);

                    Deelnemer dn = new Deelnemer();
                    dn.naam = tempDn[0];
                    dn.score = tempScore;
                }
                if (s.Contains("vraagid"))
                    this.vraagId = s.Substring(7);
                if (s.Contains("vraagnr"))
                    this.vraagNr = s.Substring(7);
                if (s.Contains("rondenr"))
                    this.rondeNr = s.Substring(7);
                if (s.Contains("antwoord"))
                    this.antwoord = s.Substring(8);
            }
        }

        //zet boodschap naar bytes
        private byte[] patchMessage()
        {
            string messageBuilder = "";

            if (this.deelnemer != null)
            {
                foreach (Deelnemer d in deelnemer)
                {
                    messageBuilder += "{naam}" + d.naam + ">";
                    messageBuilder += d.score.ToString() + "|";
                }
            }
            if (this.vraagId != null)
                messageBuilder += "vraagid" + vraagId + "|";
            if (this.vraagNr != null)
                messageBuilder += "vraagnr" + vraagNr + "|";
            if (this.rondeNr != null)
                messageBuilder += "rondenr" + rondeNr + "|";
            if (this.antwoord != null)
                messageBuilder += "antwoord" + antwoord + "|";

            messageInBytes = ConvertStringToBytes(messageBuilder);
            
            return messageInBytes;
        }

        // helper functions
        string ConvertBytesToString(byte[] bytes)
        {
            return ASCIIEncoding.ASCII.GetString(bytes);
        }

        byte[] ConvertStringToBytes(string str)
        {
            return ASCIIEncoding.ASCII.GetBytes(str);
        }

        public byte[] getByteMessage
        {
            get { return messageInBytes; }
        }

        public List<Deelnemer> getDeelnemer
        {
            get { return deelnemer; }
        }

        public string getVraagId
        {
            get { return vraagId; }
        }

        public string getVraagNr
        {
            get { return vraagNr; }
        }

        public string getRondeNr
        {
            get { return rondeNr; }
        }

        public string getAntwoord
        {
            get { return antwoord; }
        }
    }
}
